從 Day27 到 Day28,我們完成了兩個關鍵任務:
✅ Day27:AI 能依照客戶需求,自動對應 Google Sheets 的 Tag 資料,查找符合需求的標籤。
✅ Day28:Google Sheets 的 Tag 資料能與 Odoo 自動同步,確保永遠與最新狀態一致。
到這裡為止,我們已經能把 Gmail 信件中的需求 → 轉換成 標籤分類 (Tag)。
但這還只是「中間成果」。
真正的目的,其實是要讓 AI 幫我們找到對應的產品。
換句話說:
👉 客戶寄來一封詢價信
👉 AI 幫我們解析需求,對應到 Odoo 的 Tag
👉 系統再根據這些 Tag,直接找到符合的產品
最終結果:
從一封信 → 自動找到對應產品 → 帶入 Odoo 商機
這樣流程才算真正閉環。
來看一個例子:
客戶寄信:
找一支用來切削陶瓷的牙技用刀具,刀尖直徑 0.5mm,長度約 38mm。
AI 判斷出的 Tag(參考 Day27 的成果):
傳統人工流程:
1️⃣ 業務打開 Odoo → 產品清單
2️⃣ 手動篩選 Tag → 找出符合的產品
3️⃣ 再建立商機
但現在,我們要讓系統自己跑:
👉 AI 幫我們輸出 Tag
👉 系統自動比對 Odoo 產品裡的標籤
👉 篩選出符合條件的產品
那具體該怎麼實作這樣的查找流程呢?
我們馬上來看實際操作!
在 Day27,我的 Prompt 設計就特別強調「唯一且精準」。
所以當 AI 輸出分類結果時,我要求它依照 Google Sheets 中的 Tag 對照表,產生一組完全符合 Odoo Domain 語法 的篩選條件。
📌 小提醒:
如果你不確定 Odoo 的篩選程式碼是怎麼寫的,其實很簡單:
👉 先進入 Odoo,開啟 開發者模式
👉 在清單頁面使用 加入自訂準則
👉 設定篩選條件後,就可以直接看到系統自動產生的篩選程式碼
這樣一來,你就能清楚知道 Odoo 的 domain 語法長什麼樣子,後續設計 Prompt 也就不會踩坑。
📌 我的 Prompt 設計邏輯:
這樣設計下來,AI 就能輸出一份精準且符合 Odoo Domain 格式的篩選條件,不會模糊不清。
📌 我的 Prompt 範例 :
請根據下方內容及分類tag的id對照表,產生唯一且精確的篩選條件,並嚴格遵守以下規則:
1.每個分類(例如刀徑、刃數、塗層、用途等)若有多個tag值,請將該分類的所有tag id以「或」條件合併,例如 ["product_tag_ids", "=", [id1, id2, id3]]。
2.不同分類之間請用「且」條件連接,最外層請用 ["&", ...] 包覆,格式需嚴格與範例一致。
3.僅回傳篩選條件的id格式,不需任何說明或其他內容。
4.請直接回傳純文字,不要加上任何程式框、格式標籤或多餘符號。
請僅產生篩選條件id格式,嚴格依上述規則執行,不要有任何說明。
內容:{{8.result}}
分類tag:{{9.body}}
範例
內容:
刀徑:D - D2、D - D4、D - D6
刃數:刃數 - 1T
塗層:塗層 - 白
用途:用途 - 鋁銅用
對應回應:
["&", "&", "&", ["product_tag_ids", "=", [1342, 1346, 1410]], ["product_tag_ids", "=", [1379]], ["product_tag_ids", "=", [1374]], ["product_tag_ids", "=", [1372]]]
有了篩選條件後,理論上我們可以直接用 Make 的 Odoo: Make an API Call 模組來查詢 product.template
。
但實際測試時我發現一個問題:
👉 雖然能成功連到 Odoo,但 篩選 domain 條件卻一直無法正確生效。
後來我乾脆換了一種方式 —— 使用 HTTP 的 Make a Request,直接呼叫 Odoo 的 JSON-RPC API。
這樣的做法有幾個好處:
1️⃣ 可以完全掌控傳遞的 domain 條件(AI 產生的結果直接帶入)
2️⃣ 不受限於 Make 模組的封裝邏輯
📌 實作方式如下:
/jsonrpc
,例如:https://your-odoo-instance.com/jsonrpc
{
"jsonrpc": "2.0",
"method": "call",
"params": {
"service": "object",
"method": "execute_kw",
"args": [
"IT-AI_test",
2,
"abc123",
"product.template",
"search_read",
[
{{24.candidates[].content.parts[].text}}
],
{
"fields": ["name", "qty_available"]
}
]
},
"id": 1
}
其中:
"IT-AI_test"
是我的 Odoo 資料庫名稱2
是 user_id (下方有小技巧會說明如何取得)"abc123"
是 Odoo 使用者的密碼"product.template"
是模型名稱"search_read"
是方法{{24.candidates[].content.parts[].text}}
就是 AI 幫我產生的 domain 篩選條件
"fields"
指定只回傳我需要的欄位(這裡是 name 與 qty_available)這樣就能成功查到符合所有 Tag 的產品清單了 🚀
📌 小技巧:如何取得 Odoo 的 user_id?
在呼叫 JSON-RPC API 時,第二個參數需要填入使用者的 user_id。那要怎麼知道呢?
其實很簡單:
1️⃣ 先到 Odoo 後台 → 設定 → 使用者
2️⃣ 點進某個使用者(例如 admin)
3️⃣ 看一下瀏覽器網址列,格式通常會像這樣:
https://your-odoo-domain/web#id=2&action=…&model=res.users&view_type=form
👉 這裡的 id=2 就代表該使用者的 ID,也就是 user_id。
所以如果你用的是管理員帳號,通常 user_id 就是 2。
如果你用別的員工帳號,就去查對應的網址 id 值,把它填進 API 呼叫裡即可。
這樣其實就完成在 Odoo 根據 Tag 查找產品 的流程啦~
實測流程 🚀:
1️⃣ Gmail 收到詢價信 → AI 判斷需求
2️⃣ AI 輸出 Tag → 「用途:用途 - 陶瓷、形式:形式 - 牙技、D:D - D0.5、L:L - 38L」
3️⃣ 系統自動到 Odoo 查詢產品
4️⃣ 找到符合的產品:「ZA026119021202-G」
今天我們完成了最後一塊重要任務:
✅ AI 能依照客戶需求,對應出精準的 Tag
✅ 自動產生 Odoo 的篩選條件
✅ 在 Odoo 裡找到符合需求的產品
這代表什麼?
👉 客戶只要寄一封詢價信,系統就能一路跑到「找產品」這一步,完全不用人工介入。
不過,你可能也注意到了:目前我們只做到「找到產品」,還沒真正把它 放進 CRM 商機。
也就是說,商機裡雖然有客戶需求,但缺少最關鍵的 —— 對應的產品。
📌 所以明天的 Day30(系列最終回),我會帶大家實作:
👉 如何把找到的產品自動加入 Odoo CRM 商機,完成最後一步,真正做到 從需求 → Tag → 產品 → 商機 的完整閉環! 🚀